function calculateTime(seconds) { minutes = 0; if (seconds > 59) { minutes = seconds / 60; return minutes + ' minuter och ' + (seconds-minutes*60) + ' sekunder'; } else { return seconds + ' sekunder'; } } function calculateSize(parameter, decimals, prefix, suffix, ett, tva) { if (typeof parameter == 'number') { //console.log(ett + '|' + tva); if (parameter/1000000 > 1) { return (parameter/1000000).toFixed(decimals) + prefix + 'MB' + suffix } else if (parameter/1000 > 1) { return (parameter/1000).toFixed(decimals) + prefix + 'KB' + suffix } else if (parameter > 0) { return parameter.toFixed(decimals) + prefix + 'B' + suffix } else { return parameter + prefix + 'B' + suffix } } else { return 'NAN: ' + parameter; } } meassurements = []; content = {}; seconds = 0; biggestDiffen = 0; function speedCalculator() { seconds++; } function hastighetsTimerSlut() { clearInterval(hastighetsTimer); } hastighetskollen = new XMLHttpRequest(); hastighetskollen.onprogress = function(event) { if (event.lengthComputable) { window.newloaded = event.loaded; //i++; diffen = typeof window.oldloaded != 'undefined' ? window.newloaded - window.oldloaded : 0; if (diffen > 0) { meassurements.push(diffen); } if (diffen > biggestDiffen) { biggestDiffen = diffen; } document.getElementById('remaining').innerHTML = calculateTime(Math.round((event.total - event.loaded) * seconds / event.loaded)); document.getElementById('percent').innerHTML = (event.loaded / event.total * 100).toFixed(2) + '%'; document.getElementById('loaded').innerHTML = calculateSize(event.loaded, 2, ' ', ''); document.getElementById('total').innerHTML = calculateSize(event.total, 2, ' ', ''); document.getElementById('time').innerHTML = calculateTime(seconds); document.getElementById('speed').innerHTML = calculateSize(diffen, 2, ' ', 'IT', window.newloaded, window.oldloaded); document.querySelector('#statusbar > span').style.width = event.loaded / event.total * 100 + '%'; //document.querySelector('.fa-arrow-circle-o-left').style.transform = 'rotate(' + (180 * event.loaded / event.total) + 'deg)'; document.querySelector('.fa-arrow-circle-o-left').style.transform = 'rotate(' + (180 * diffen / biggestDiffen) + 'deg)'; window.oldloaded = window.newloaded; } else { // Unable to compute progress information since the total size is unknown } } hastighetskollen.load = function() { document.body.style.background = 'lightgreen'; } hastighetskollen.onabort = function() { document.body.style.background = 'lemon'; } hastighetskollen.onerror = function() { document.body.style.background = 'pink'; } hastighetskollen.onreadystatechange = function() { //console.log("readyState: " + hastighetskollen.readyState + "\nstatus: " + hastighetskollen.status + "\nstatusText: " + hastighetskollen.statusText); if (hastighetskollen.readyState == 1) { //document.querySelector('i').style.display = 'block'; } if (hastighetskollen.readyState == 4) { if (hastighetskollen.status == 200) { //document.querySelector('i').style.display = 'none'; //myFunction(hastighetskollen); hastighetsTimerSlut(); document.getElementById('of').style.display = 'none'; document.getElementById('left').style.display = 'none'; document.getElementById('tempus').innerHTML = 'tog'; document.getElementById('calculated').innerHTML = 'beräknas vara'; meassurements.sort(); content['speed'] = {}; content['speed']['meassurements'] = meassurements; content['time'] = {}; content['time']['computer readable'] = seconds; content['time']['human readable'] = calculateTime(content['time']['computer readable']); document.getElementById('time').innerHTML = content['time']['human readable']; content['file size'] = {}; content['file size']['computer readable'] = 7865288; content['file size']['human readable'] = calculateSize(content['file size']['computer readable'], 2, ' ', ''); document.getElementById('total').innerHTML; content['speed']['slowest'] = {}; content['speed']['slowest']['computer readable'] = meassurements[0]; content['speed']['slowest']['human readable'] = calculateSize(content['speed']['slowest']['computer readable'], 2, ' ', 'IT'); content['speed']['fastest'] = {}; content['speed']['fastest']['computer readable'] = meassurements[meassurements.length-1]; content['speed']['fastest']['human readable'] = calculateSize(content['speed']['fastest']['computer readable'], 2, ' ', 'IT'); content['speed']['average'] = {}; content['speed']['average']['computer readable'] = meassurements.reduce((a, b) => a + b, 1) / meassurements.length; content['speed']['average']['human readable'] = calculateSize(content['speed']['average']['computer readable'], 2, ' ', 'IT'); content['speed']['median'] = {}; content['speed']['median']['computer readable'] = meassurements[Math.floor(meassurements.length/2)]; content['speed']['median']['human readable'] = calculateSize(content['speed']['median']['computer readable'], 2, ' ', 'IT'); document.getElementById('speed').innerHTML = content['speed']['median']['human readable']; pausa.style.display = 'none'; abort.style.display = 'none'; restart.style.display = 'inline-block'; exporta.style.display = 'inline-block'; } else { retry.style.display = 'inline-block'; } } }; hastighetskollen.open('GET', '/cors/feed.xml?unix-timestamp=' + Date.now()); // ?" + (Math.random().toString(16) + "000000").substring(2,8), true); exporta.onclick = function() { //file = new Blob([JSON.stringify(meassurements)], {type: 'application/x-please-download-me'}); console.log(content); file = new Blob([JSON.stringify(content, null, 4)], {type: 'application/json'}); url = URL.createObjectURL(file); link = document.createElement('a'); link.href = url; datum = Date; datetime = new Date().toLocaleDateString('sv-SE', { year: 'numeric', month: 'numeric', day: 'numeric', hour: 'numeric', minute: 'numeric' }).replace(/:| /g, '-'); link.download = 'meassurements-' + datetime + '.json'; link.click(); //window.location.href = url; } start.onclick = function() { document.getElementById('statusbar').style.display = 'block'; document.getElementById('speed-info').style.display = 'block'; speedintro.style.display = 'none'; this.style.display = 'none'; pausa.style.display = 'inline-block'; abort.style.display = 'inline-block'; hastighetsTimer = setInterval(function() { speedCalculator() }, 1000); hastighetskollen.send(); } restart.onclick = function() { this.style.display = 'none'; exporta.style.display = 'none'; pausa.style.display = 'inline-block'; abort.style.display = 'inline-block'; seconds = 0; biggestDiffen = 0; meassurements = []; window.newloaded = 0; hastighetsTimer = setInterval(function() { speedCalculator() }, 1000); hastighetskollen.open('GET', '/cors/feed.xml?unix-timestamp=' + Date.now()); hastighetskollen.send(); } pausa.onclick = function() { this.style.display = 'none'; resume.style.display = 'inline-block'; hastighetsTimerSlut(); } abort.onclick = function() { hastighetsTimerSlut(); seconds = 0; biggestDiffen = 0; window.newloaded = 0; this.style.display = 'none'; pausa.style.display = 'none'; resume.style.display = 'none'; start.style.display = 'inline-block'; } resume.onclick = function() { this.style.display = 'none'; pausa.style.display = 'inline-block'; abort.style.display = 'inline-block'; hastighetsTimer = setInterval(function() { speedCalculator() }, 1000); } retry.onclick = function() { hastighetsTimerSlut(); seconds = 0; biggestDiffen = 0; meassurements = []; window.newloaded = 0; hastighetsTimer = setInterval(function() { speedCalculator() }, 1000); hastighetskollen.open('GET', '/cors/feed.xml?unix-timestamp=' + Date.now()); hastighetskollen.send(); this.style.display = 'none'; pausa.style.display = 'inline-block'; abort.style.display = 'inline-block'; }